Skip to content

fix(media): clean up watchlist on error card delete#3073

Merged
fallenbagel merged 1 commit into
developfrom
fix/error-card-delete-cleans-up-watchlist
May 25, 2026
Merged

fix(media): clean up watchlist on error card delete#3073
fallenbagel merged 1 commit into
developfrom
fix/error-card-delete-cleans-up-watchlist

Conversation

@fallenbagel

@fallenbagel fallenbagel commented May 24, 2026

Copy link
Copy Markdown
Member

Description

When dismissing an error card for unavailable media, the watchlist entry for that item was not being removed, causing it to reappear on the discover watchlist page after deletion.

The PR fixes this by removing the watchlist entry first before deleting the media record, then mutates the watchlist discover endpoint so the UI reflects the removal immediately, and silently swallows 404s on the watchlist delete since the entry may not exist.

On the server side, concurrent or repeated delete requests for the same media record could hit a race where the entity is already gone, resulting in an unhandled EntityNotFoundError being logged as an error and returning 404 and this PR fixes that by catching that case and returning 204 instead since the desired end state is already achieved.

How Has This Been Tested?

  • This PR has a preview with the tag preview-clean-up-watchlist-error-card

Screenshots / Logs (if applicable)

Checklist:

  • I have read and followed the contribution guidelines.
  • Disclosed any use of AI (see our policy)
  • I have updated the documentation accordingly.
  • All new and existing tests passed.
  • Successful build pnpm build
  • Translation keys pnpm i18n:extract
  • Database migration (if required)

Summary by CodeRabbit

  • Bug Fixes
    • More reliable media deletion that also removes related watchlist entries.
    • Improved error handling with clear on-screen notifications for failures (non-not-found cases).
    • Deletion now treats missing items as no-ops instead of errors.
    • Client caches refresh correctly after deletions to keep UI in sync.
    • Server deletion responses made more accurate for different failure scenarios.

Review Change Stack

@fallenbagel fallenbagel requested a review from Copilot May 24, 2026 22:05
@fallenbagel fallenbagel requested a review from a team as a code owner May 24, 2026 22:05
@fallenbagel fallenbagel added the preview PRs deployed for testing with tag `:preview-prxx` label May 24, 2026
@coderabbitai

coderabbitai Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 229e48dd-d1bc-43b6-b4de-ae8f7b9d05e7

📥 Commits

Reviewing files that changed from the base of the PR and between 311d526 and afc38dd.

📒 Files selected for processing (2)
  • server/routes/media.ts
  • src/components/TitleCard/ErrorCard.tsx

📝 Walkthrough

Walkthrough

Server DELETE /:id treats missing Media as HTTP 204; the client Clear Data flow first removes the watchlist entry, then the media record, shows toasts on unexpected failures, and refreshes SWR caches.

Changes

Delisted Media Cleanup

Layer / File(s) Summary
Server-side media deletion error handling
server/routes/media.ts
Adds EntityNotFoundError import and updates the DELETE /:id handler to return HTTP 204 for missing media and log+return HTTP 500 for other errors.
Client-side watchlist and media cleanup
src/components/TitleCard/ErrorCard.tsx
Imports useToasts and rewrites deleteMedia to delete the watchlist entry first (tolerating 404), then delete the media (tolerating 404), toast on unexpected failures, and refresh SWR caches for watchlist discover, the media query, and request query.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • seerr-team/seerr#2478: Modifies the same DELETE /:id media route with related deletion/error-handling changes.
  • seerr-team/seerr#2577: Adjusts watchlist operations to include mediaType scoping, aligning with the watchlist deletion call in this PR.

Suggested labels

bug

Suggested reviewers

  • gauthier-th
  • 0xSysR3ll

Poem

🐰 I nibble at delisted lore,
First the watchlist, then the core.
A gentle 204, no fight—
Toast for errors in the night.
Cache refreshed, the bun hops light.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(media): clean up watchlist on error card delete' clearly and specifically summarizes the main change: ensuring watchlist entries are removed when dismissing error cards for unavailable media.
Linked Issues check ✅ Passed The PR fully addresses issue #3046 requirements: removes watchlist entries before deleting media, makes delete operations idempotent by catching EntityNotFoundError and returning 204, and updates UI immediately via SWR cache mutation.
Out of Scope Changes check ✅ Passed All changes are directly scoped to fixing issue #3046: modifications to media route error handling and error card delete flow are necessary and focused on the watchlist cleanup objective.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes an issue where dismissing an “unavailable media” error card did not remove the item from the watchlist, causing it to reappear, and makes server-side media deletes resilient to concurrent/repeated delete requests.

Changes:

  • Client: delete the watchlist entry first when clearing unavailable media, then revalidate the watchlist discover feed.
  • Client: treat watchlist-delete 404s as non-fatal (entry may already be gone).
  • Server: treat TypeORM EntityNotFoundError during delete as a successful no-op (204), and return 500 for unexpected delete failures.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/components/TitleCard/ErrorCard.tsx Updates “Clear Data” behavior to remove watchlist entry first and revalidate affected SWR keys.
server/routes/media.ts Makes media deletion idempotent by returning 204 when the entity is already missing and improving error handling.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/components/TitleCard/ErrorCard.tsx Outdated
Comment thread server/routes/media.ts Outdated
Delete the watchlist entry before removing media on error card dismissal, refresh the watchlist
discover page, and handle already-deleted media gracefully on the server

fix #3046
@fallenbagel fallenbagel force-pushed the fix/error-card-delete-cleans-up-watchlist branch from 311d526 to afc38dd Compare May 24, 2026 22:10
coderabbitai[bot]

This comment was marked as outdated.

@seerr-automation-bot seerr-automation-bot added this to the v3.3.0 milestone May 24, 2026

@0xSysR3ll 0xSysR3ll left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@fallenbagel fallenbagel enabled auto-merge (squash) May 25, 2026 16:24
@fallenbagel fallenbagel merged commit ee915b9 into develop May 25, 2026
20 checks passed
@fallenbagel fallenbagel deleted the fix/error-card-delete-cleans-up-watchlist branch May 25, 2026 18:07
Copilot AI pushed a commit to NotCavnfox/seerr that referenced this pull request Jun 1, 2026
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 2, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.2.0` → `v3.3.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (seerr/seerr)</summary>

### [`v3.3.0`](https://github.com/seerr-team/seerr/releases/tag/v3.3.0)

[Compare Source](seerr-team/seerr@v3.2.0...v3.3.0)

##### [3.3.0](https://github.com/seerr-team/seerr/compare/v3.2.0..v3.3.0) - 2026-06-02

##### 🚀 Features

- *(db)* Add DB\_POOL\_SIZE environment variable for postgres connection pool ([#&#8203;2990](seerr-team/seerr#2990)) - ([f093c69](seerr-team/seerr@f093c69))
- *(i18n)* Add server-side i18n for notification agents ([#&#8203;2731](seerr-team/seerr#2731)) - ([cd257ba](seerr-team/seerr@cd257ba))
- *(notification)* Add support for public seerr logo in email ([#&#8203;3036](seerr-team/seerr#3036)) - ([a8f147d](seerr-team/seerr@a8f147d))
- *(notifications)* Support multiple Discord IDs ([#&#8203;2712](seerr-team/seerr#2712)) - ([63175f5](seerr-team/seerr@63175f5))
- Add plex media ratingKey and ratingKey4k to webhook payload and… ([#&#8203;1812](seerr-team/seerr#1812)) - ([9b7b50b](seerr-team/seerr@9b7b50b))
- Add route to fetch user by jellyfin id ([#&#8203;2074](seerr-team/seerr#2074)) - ([15296a0](seerr-team/seerr@15296a0))
- Filter out "Thanks" credits when looking at a person's credits ([#&#8203;2370](seerr-team/seerr#2370)) - ([d024849](seerr-team/seerr@d024849))

##### 🐛 Bug Fixes

- *(auth)* Drop popup.closed check in Plex pin poll ([#&#8203;2941](seerr-team/seerr#2941)) - ([ce9643c](seerr-team/seerr@ce9643c))
- *(availability-sync)* Detect deleted seasons when media server retains empty season metadata ([#&#8203;2850](seerr-team/seerr#2850)) - ([9c34864](seerr-team/seerr@9c34864))
- *(discover)* Preserve keyword filter input focus after selection ([#&#8203;2962](seerr-team/seerr#2962)) - ([32169d9](seerr-team/seerr@32169d9))
- *(docs)* Enable trailingSlash to prevent 404 flash on direct navigation ([#&#8203;3039](seerr-team/seerr#3039)) - ([df105b8](seerr-team/seerr@df105b8))
- *(docs)* Switch to SWC minimizer to fix broken runtime bundle - ([d88242f](seerr-team/seerr@d88242f))
- *(docs)* Bump openapi docs packages to 5.0.2 ([#&#8203;3027](seerr-team/seerr#3027)) - ([080c68a](seerr-team/seerr@080c68a))
- *(entity)* Set the default value of UpdateDateColumn to CURRENT\_TIMESTAMP ([#&#8203;2913](seerr-team/seerr#2913)) - ([86e780e](seerr-team/seerr@86e780e))
- *(external-link)* Replace TMDB ID with IMDB ID for Trakt links ([#&#8203;2934](seerr-team/seerr#2934)) - ([f078da8](seerr-team/seerr@f078da8))
- *(imdbRadarrProxy)* Pass headers and nodeCache as options instead of params ([#&#8203;2900](seerr-team/seerr#2900)) - ([7861db4](seerr-team/seerr@7861db4))
- *(issuedescription)* Fix issue display lists in IssueDescription ([#&#8203;2972](seerr-team/seerr#2972)) - ([ce47cfb](seerr-team/seerr@ce47cfb))
- *(media)* Clean up watchlist on error card delete ([#&#8203;3073](seerr-team/seerr#3073)) - ([ee915b9](seerr-team/seerr@ee915b9))
- *(media-request)* Remove cascade from modifiedBy to prevent user column wipe ([#&#8203;2911](seerr-team/seerr#2911)) - ([2dfea0c](seerr-team/seerr@2dfea0c))
- *(ntfy)* Save priority field as number instead of string ([#&#8203;3096](seerr-team/seerr#3096)) - ([2fa535d](seerr-team/seerr@2fa535d))
- *(ntfy)* Remove undefined fields from ntfy payload ([#&#8203;2931](seerr-team/seerr#2931)) - ([377bf65](seerr-team/seerr@377bf65))
- *(override-rules)* Use find() instead of index lookup for service resolution ([#&#8203;2903](seerr-team/seerr#2903)) - ([5fdedb1](seerr-team/seerr@5fdedb1))
- *(plex-watchlist-sync)* Handle MediaContainer.Video fallback in watchlist sync   ([#&#8203;2992](seerr-team/seerr#2992)) - ([99f8520](seerr-team/seerr@99f8520))
- *(request)* Restore media status correctly when deleting requests ([#&#8203;3064](seerr-team/seerr#3064)) - ([ff88d52](seerr-team/seerr@ff88d52))
- *(scanners)* Reset orphaned processing media from deleted Radarr/Sonarr entries ([#&#8203;2757](seerr-team/seerr#2757)) - ([198e4e5](seerr-team/seerr@198e4e5))
- *(scanners)* Ignore unknown seasons in availability rollup and skip empty placeholder seasons ([#&#8203;2958](seerr-team/seerr#2958)) - ([ce51f6a](seerr-team/seerr@ce51f6a))
- *(search)* Replace "TV" with "Series" in search placeholder ([#&#8203;3067](seerr-team/seerr#3067)) - ([c04172a](seerr-team/seerr@c04172a))
- *(slider)* Add async to spring animation ([#&#8203;2978](seerr-team/seerr#2978)) - ([5267611](seerr-team/seerr@5267611))
- *(tag)* Use inset ring to avoid clipped outlines ([#&#8203;2985](seerr-team/seerr#2985)) - ([cf87205](seerr-team/seerr@cf87205))
- *(tvrequest)* Allow special episodes when partial series requests are disabled ([#&#8203;2973](seerr-team/seerr#2973)) - ([b32ab02](seerr-team/seerr@b32ab02))
- *(users)* Correct auth middleware for web push subscription ([#&#8203;3005](seerr-team/seerr#3005)) - ([bd27f2d](seerr-team/seerr@bd27f2d))
- *(watchlistsync)* Re-request deleted media from watchlist ([#&#8203;3072](seerr-team/seerr#3072)) - ([2588e49](seerr-team/seerr@2588e49))
- Update series status to partially available when seasons are missing ([#&#8203;3044](seerr-team/seerr#3044)) - ([4ed29cf](seerr-team/seerr@4ed29cf))
- Add missing "key" to React arrays ([#&#8203;3043](seerr-team/seerr#3043)) - ([4fa2c71](seerr-team/seerr@4fa2c71))
- Send availability notification if media is available before approval ([#&#8203;2819](seerr-team/seerr#2819)) - ([d426e1e](seerr-team/seerr@d426e1e))
- Normalize webhook payload encoding to support raw JSON inputs ([#&#8203;2641](seerr-team/seerr#2641)) - ([5b45806](seerr-team/seerr@5b45806))

##### 📖 Documentation

- *(blog)* Add v3.3.0 release blog post ([#&#8203;3098](seerr-team/seerr#3098)) - ([759e359](seerr-team/seerr@759e359))
- *(fail2ban)* Add fail2ban documentation ([#&#8203;2894](seerr-team/seerr#2894)) - ([39e9f1f](seerr-team/seerr@39e9f1f))
- *(nixpkgs)* Add documentation for nixpkgs 26.05 ([#&#8203;3089](seerr-team/seerr#3089)) - ([5fc7a40](seerr-team/seerr@5fc7a40))
- Add REST API documentation ([#&#8203;2981](seerr-team/seerr#2981)) - ([7aa1470](seerr-team/seerr@7aa1470))
- Add Terraform/OpenTofu provider page ([#&#8203;2967](seerr-team/seerr#2967)) - ([811126d](seerr-team/seerr@811126d))

##### 🚜 Refactor

- *(docs)* Move REST API docs to navbar and dedicated sidebar ([#&#8203;3040](seerr-team/seerr#3040)) - ([08b7bd4](seerr-team/seerr@08b7bd4))
- *(logs)* Align failed login attempt message with failed sign-i… ([#&#8203;2914](seerr-team/seerr#2914)) - ([3e4bf1b](seerr-team/seerr@3e4bf1b))
- Replace react-toast-notifications with react-hot-toast ([#&#8203;3004](seerr-team/seerr#3004)) - ([dfde4d3](seerr-team/seerr@dfde4d3))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3028](seerr-team/seerr#3028)) - ([6bb402a](seerr-team/seerr@6bb402a))
- *(actions)* Update github actions ([#&#8203;2982](seerr-team/seerr#2982)) - ([20dbc30](seerr-team/seerr@20dbc30))
- *(actions)* Update github actions (major) ([#&#8203;2947](seerr-team/seerr#2947)) - ([952261b](seerr-team/seerr@952261b))
- *(actions)* Update taiki-e/install-action action to v2.75.18 ([#&#8203;2961](seerr-team/seerr#2961)) - ([d50bdad](seerr-team/seerr@d50bdad))
- *(actions)* Update github actions ([#&#8203;2945](seerr-team/seerr#2945)) - ([60a2a87](seerr-team/seerr@60a2a87))
- *(create-tag)* Add gh token to avoid api rate limit in tag version retrieval ([#&#8203;2886](seerr-team/seerr#2886)) - ([85bfdb2](seerr-team/seerr@85bfdb2))
- *(i18n)* Update translations from Weblate - ([73fcfd2](seerr-team/seerr@73fcfd2))
- *(i18n)* Update translations from Weblate - ([788311a](seerr-team/seerr@788311a))
- *(i18n)* Update translations from Weblate - ([6eb43e0](seerr-team/seerr@6eb43e0))
- *(i18n)* Update translations from Weblate - ([656e33f](seerr-team/seerr@656e33f))
- *(i18n)* Update translations from Weblate - ([4742018](seerr-team/seerr@4742018))
- *(i18n)* Update translations from Weblate - ([2d4cd03](seerr-team/seerr@2d4cd03))
- *(i18n)* Update translations from Weblate - ([3c249c7](seerr-team/seerr@3c249c7))
- *(i18n)* Update translations from Weblate - ([4e4e673](seerr-team/seerr@4e4e673))
- *(i18n)* Update translations from Weblate ([#&#8203;2906](seerr-team/seerr#2906)) - ([6513915](seerr-team/seerr@6513915))
- *(i18n)* Update translations from Weblate ([#&#8203;2901](seerr-team/seerr#2901)) - ([56ab94a](seerr-team/seerr@56ab94a))
- *(release)* Prepare v3.2.0 - ([703faf9](seerr-team/seerr@703faf9))
- *(release)* Merge develop into main - ([0621e3d](seerr-team/seerr@0621e3d))
- *(release)* Remove git-cliff footer in release changelog ([#&#8203;2986](seerr-team/seerr#2986)) - ([550c3bc](seerr-team/seerr@550c3bc))
- Cleanup intl polyfills and dev config ([#&#8203;2965](seerr-team/seerr#2965)) - ([ba6ed6c](seerr-team/seerr@ba6ed6c))
- Ignore Renovate bot on irrelevant jobs ([#&#8203;2904](seerr-team/seerr#2904)) - ([1d2aa76](seerr-team/seerr@1d2aa76))

##### New Contributors ❤️

- [@&#8203;defaultdino](https://github.com/defaultdino) made their first contribution
- [@&#8203;haribo-hyung](https://github.com/haribo-hyung) made their first contribution
- [@&#8203;felixschndr](https://github.com/felixschndr) made their first contribution
- [@&#8203;burakemirsezen](https://github.com/burakemirsezen) made their first contribution
- [@&#8203;death2all110](https://github.com/death2all110) made their first contribution
- [@&#8203;fredrikburmester](https://github.com/fredrikburmester) made their first contribution
- [@&#8203;marcinjurczak](https://github.com/marcinjurczak) made their first contribution
- [@&#8203;Josh-Archer](https://github.com/Josh-Archer) made their first contribution
- [@&#8203;Finchow](https://github.com/Finchow) made their first contribution
- [@&#8203;kyle-engler](https://github.com/kyle-engler) made their first contribution
- [@&#8203;danjuv](https://github.com/danjuv) made their first contribution
- [@&#8203;aldoeliacim](https://github.com/aldoeliacim) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/791
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Jun 2, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.2.0` → `v3.3.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (seerr/seerr)</summary>

### [`v3.3.0`](https://github.com/seerr-team/seerr/releases/tag/v3.3.0)

[Compare Source](seerr-team/seerr@v3.2.0...v3.3.0)

##### [3.3.0](https://github.com/seerr-team/seerr/compare/v3.2.0..v3.3.0) - 2026-06-02

##### 🚀 Features

- *(db)* Add DB\_POOL\_SIZE environment variable for postgres connection pool ([#&#8203;2990](seerr-team/seerr#2990)) - ([f093c69](seerr-team/seerr@f093c69))
- *(i18n)* Add server-side i18n for notification agents ([#&#8203;2731](seerr-team/seerr#2731)) - ([cd257ba](seerr-team/seerr@cd257ba))
- *(notification)* Add support for public seerr logo in email ([#&#8203;3036](seerr-team/seerr#3036)) - ([a8f147d](seerr-team/seerr@a8f147d))
- *(notifications)* Support multiple Discord IDs ([#&#8203;2712](seerr-team/seerr#2712)) - ([63175f5](seerr-team/seerr@63175f5))
- Add plex media ratingKey and ratingKey4k to webhook payload and… ([#&#8203;1812](seerr-team/seerr#1812)) - ([9b7b50b](seerr-team/seerr@9b7b50b))
- Add route to fetch user by jellyfin id ([#&#8203;2074](seerr-team/seerr#2074)) - ([15296a0](seerr-team/seerr@15296a0))
- Filter out "Thanks" credits when looking at a person's credits ([#&#8203;2370](seerr-team/seerr#2370)) - ([d024849](seerr-team/seerr@d024849))

##### 🐛 Bug Fixes

- *(auth)* Drop popup.closed check in Plex pin poll ([#&#8203;2941](seerr-team/seerr#2941)) - ([ce9643c](seerr-team/seerr@ce9643c))
- *(availability-sync)* Detect deleted seasons when media server retains empty season metadata ([#&#8203;2850](seerr-team/seerr#2850)) - ([9c34864](seerr-team/seerr@9c34864))
- *(discover)* Preserve keyword filter input focus after selection ([#&#8203;2962](seerr-team/seerr#2962)) - ([32169d9](seerr-team/seerr@32169d9))
- *(docs)* Enable trailingSlash to prevent 404 flash on direct navigation ([#&#8203;3039](seerr-team/seerr#3039)) - ([df105b8](seerr-team/seerr@df105b8))
- *(docs)* Switch to SWC minimizer to fix broken runtime bundle - ([d88242f](seerr-team/seerr@d88242f))
- *(docs)* Bump openapi docs packages to 5.0.2 ([#&#8203;3027](seerr-team/seerr#3027)) - ([080c68a](seerr-team/seerr@080c68a))
- *(entity)* Set the default value of UpdateDateColumn to CURRENT\_TIMESTAMP ([#&#8203;2913](seerr-team/seerr#2913)) - ([86e780e](seerr-team/seerr@86e780e))
- *(external-link)* Replace TMDB ID with IMDB ID for Trakt links ([#&#8203;2934](seerr-team/seerr#2934)) - ([f078da8](seerr-team/seerr@f078da8))
- *(imdbRadarrProxy)* Pass headers and nodeCache as options instead of params ([#&#8203;2900](seerr-team/seerr#2900)) - ([7861db4](seerr-team/seerr@7861db4))
- *(issuedescription)* Fix issue display lists in IssueDescription ([#&#8203;2972](seerr-team/seerr#2972)) - ([ce47cfb](seerr-team/seerr@ce47cfb))
- *(media)* Clean up watchlist on error card delete ([#&#8203;3073](seerr-team/seerr#3073)) - ([ee915b9](seerr-team/seerr@ee915b9))
- *(media-request)* Remove cascade from modifiedBy to prevent user column wipe ([#&#8203;2911](seerr-team/seerr#2911)) - ([2dfea0c](seerr-team/seerr@2dfea0c))
- *(ntfy)* Save priority field as number instead of string ([#&#8203;3096](seerr-team/seerr#3096)) - ([2fa535d](seerr-team/seerr@2fa535d))
- *(ntfy)* Remove undefined fields from ntfy payload ([#&#8203;2931](seerr-team/seerr#2931)) - ([377bf65](seerr-team/seerr@377bf65))
- *(override-rules)* Use find() instead of index lookup for service resolution ([#&#8203;2903](seerr-team/seerr#2903)) - ([5fdedb1](seerr-team/seerr@5fdedb1))
- *(plex-watchlist-sync)* Handle MediaContainer.Video fallback in watchlist sync   ([#&#8203;2992](seerr-team/seerr#2992)) - ([99f8520](seerr-team/seerr@99f8520))
- *(request)* Restore media status correctly when deleting requests ([#&#8203;3064](seerr-team/seerr#3064)) - ([ff88d52](seerr-team/seerr@ff88d52))
- *(scanners)* Reset orphaned processing media from deleted Radarr/Sonarr entries ([#&#8203;2757](seerr-team/seerr#2757)) - ([198e4e5](seerr-team/seerr@198e4e5))
- *(scanners)* Ignore unknown seasons in availability rollup and skip empty placeholder seasons ([#&#8203;2958](seerr-team/seerr#2958)) - ([ce51f6a](seerr-team/seerr@ce51f6a))
- *(search)* Replace "TV" with "Series" in search placeholder ([#&#8203;3067](seerr-team/seerr#3067)) - ([c04172a](seerr-team/seerr@c04172a))
- *(slider)* Add async to spring animation ([#&#8203;2978](seerr-team/seerr#2978)) - ([5267611](seerr-team/seerr@5267611))
- *(tag)* Use inset ring to avoid clipped outlines ([#&#8203;2985](seerr-team/seerr#2985)) - ([cf87205](seerr-team/seerr@cf87205))
- *(tvrequest)* Allow special episodes when partial series requests are disabled ([#&#8203;2973](seerr-team/seerr#2973)) - ([b32ab02](seerr-team/seerr@b32ab02))
- *(users)* Correct auth middleware for web push subscription ([#&#8203;3005](seerr-team/seerr#3005)) - ([bd27f2d](seerr-team/seerr@bd27f2d))
- *(watchlistsync)* Re-request deleted media from watchlist ([#&#8203;3072](seerr-team/seerr#3072)) - ([2588e49](seerr-team/seerr@2588e49))
- Update series status to partially available when seasons are missing ([#&#8203;3044](seerr-team/seerr#3044)) - ([4ed29cf](seerr-team/seerr@4ed29cf))
- Add missing "key" to React arrays ([#&#8203;3043](seerr-team/seerr#3043)) - ([4fa2c71](seerr-team/seerr@4fa2c71))
- Send availability notification if media is available before approval ([#&#8203;2819](seerr-team/seerr#2819)) - ([d426e1e](seerr-team/seerr@d426e1e))
- Normalize webhook payload encoding to support raw JSON inputs ([#&#8203;2641](seerr-team/seerr#2641)) - ([5b45806](seerr-team/seerr@5b45806))

##### 📖 Documentation

- *(blog)* Add v3.3.0 release blog post ([#&#8203;3098](seerr-team/seerr#3098)) - ([759e359](seerr-team/seerr@759e359))
- *(fail2ban)* Add fail2ban documentation ([#&#8203;2894](seerr-team/seerr#2894)) - ([39e9f1f](seerr-team/seerr@39e9f1f))
- *(nixpkgs)* Add documentation for nixpkgs 26.05 ([#&#8203;3089](seerr-team/seerr#3089)) - ([5fc7a40](seerr-team/seerr@5fc7a40))
- Add REST API documentation ([#&#8203;2981](seerr-team/seerr#2981)) - ([7aa1470](seerr-team/seerr@7aa1470))
- Add Terraform/OpenTofu provider page ([#&#8203;2967](seerr-team/seerr#2967)) - ([811126d](seerr-team/seerr@811126d))

##### 🚜 Refactor

- *(docs)* Move REST API docs to navbar and dedicated sidebar ([#&#8203;3040](seerr-team/seerr#3040)) - ([08b7bd4](seerr-team/seerr@08b7bd4))
- *(logs)* Align failed login attempt message with failed sign-i… ([#&#8203;2914](seerr-team/seerr#2914)) - ([3e4bf1b](seerr-team/seerr@3e4bf1b))
- Replace react-toast-notifications with react-hot-toast ([#&#8203;3004](seerr-team/seerr#3004)) - ([dfde4d3](seerr-team/seerr@dfde4d3))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3028](seerr-team/seerr#3028)) - ([6bb402a](seerr-team/seerr@6bb402a))
- *(actions)* Update github actions ([#&#8203;2982](seerr-team/seerr#2982)) - ([20dbc30](seerr-team/seerr@20dbc30))
- *(actions)* Update github actions (major) ([#&#8203;2947](seerr-team/seerr#2947)) - ([952261b](seerr-team/seerr@952261b))
- *(actions)* Update taiki-e/install-action action to v2.75.18 ([#&#8203;2961](seerr-team/seerr#2961)) - ([d50bdad](seerr-team/seerr@d50bdad))
- *(actions)* Update github actions ([#&#8203;2945](seerr-team/seerr#2945)) - ([60a2a87](seerr-team/seerr@60a2a87))
- *(create-tag)* Add gh token to avoid api rate limit in tag version retrieval ([#&#8203;2886](seerr-team/seerr#2886)) - ([85bfdb2](seerr-team/seerr@85bfdb2))
- *(i18n)* Update translations from Weblate - ([73fcfd2](seerr-team/seerr@73fcfd2))
- *(i18n)* Update translations from Weblate - ([788311a](seerr-team/seerr@788311a))
- *(i18n)* Update translations from Weblate - ([6eb43e0](seerr-team/seerr@6eb43e0))
- *(i18n)* Update translations from Weblate - ([656e33f](seerr-team/seerr@656e33f))
- *(i18n)* Update translations from Weblate - ([4742018](seerr-team/seerr@4742018))
- *(i18n)* Update translations from Weblate - ([2d4cd03](seerr-team/seerr@2d4cd03))
- *(i18n)* Update translations from Weblate - ([3c249c7](seerr-team/seerr@3c249c7))
- *(i18n)* Update translations from Weblate - ([4e4e673](seerr-team/seerr@4e4e673))
- *(i18n)* Update translations from Weblate ([#&#8203;2906](seerr-team/seerr#2906)) - ([6513915](seerr-team/seerr@6513915))
- *(i18n)* Update translations from Weblate ([#&#8203;2901](seerr-team/seerr#2901)) - ([56ab94a](seerr-team/seerr@56ab94a))
- *(release)* Prepare v3.2.0 - ([703faf9](seerr-team/seerr@703faf9))
- *(release)* Merge develop into main - ([0621e3d](seerr-team/seerr@0621e3d))
- *(release)* Remove git-cliff footer in release changelog ([#&#8203;2986](seerr-team/seerr#2986)) - ([550c3bc](seerr-team/seerr@550c3bc))
- Cleanup intl polyfills and dev config ([#&#8203;2965](seerr-team/seerr#2965)) - ([ba6ed6c](seerr-team/seerr@ba6ed6c))
- Ignore Renovate bot on irrelevant jobs ([#&#8203;2904](seerr-team/seerr#2904)) - ([1d2aa76](seerr-team/seerr@1d2aa76))

##### New Contributors ❤️

- [@&#8203;defaultdino](https://github.com/defaultdino) made their first contribution
- [@&#8203;haribo-hyung](https://github.com/haribo-hyung) made their first contribution
- [@&#8203;felixschndr](https://github.com/felixschndr) made their first contribution
- [@&#8203;burakemirsezen](https://github.com/burakemirsezen) made their first contribution
- [@&#8203;death2all110](https://github.com/death2all110) made their first contribution
- [@&#8203;fredrikburmester](https://github.com/fredrikburmester) made their first contribution
- [@&#8203;marcinjurczak](https://github.com/marcinjurczak) made their first contribution
- [@&#8203;Josh-Archer](https://github.com/Josh-Archer) made their first contribution
- [@&#8203;Finchow](https://github.com/Finchow) made their first contribution
- [@&#8203;kyle-engler](https://github.com/kyle-engler) made their first contribution
- [@&#8203;danjuv](https://github.com/danjuv) made their first contribution
- [@&#8203;aldoeliacim](https://github.com/aldoeliacim) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDYuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIwNi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/177
daaliso pushed a commit to daaliso/seerr that referenced this pull request Jun 3, 2026
blake-hamm added a commit to blake-hamm/bhamm-lab that referenced this pull request Jun 28, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/seerr-team/seerr](https://github.com/seerr-team/seerr) | minor | `v3.0.1` → `v3.3.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (ghcr.io/seerr-team/seerr)</summary>

### [`v3.3.0`](https://github.com/seerr-team/seerr/releases/tag/v3.3.0)

[Compare Source](seerr-team/seerr@v3.2.0...v3.3.0)

##### 🚀 Features

- *(db)* Add DB\_POOL\_SIZE environment variable for postgres connection pool ([#&#8203;2990](seerr-team/seerr#2990)) - ([f093c69](seerr-team/seerr@f093c69))
- *(i18n)* Add server-side i18n for notification agents ([#&#8203;2731](seerr-team/seerr#2731)) - ([cd257ba](seerr-team/seerr@cd257ba))
- *(notification)* Add support for public seerr logo in email ([#&#8203;3036](seerr-team/seerr#3036)) - ([a8f147d](seerr-team/seerr@a8f147d))
- \[**breaking**]*(notifications)* Support multiple Discord IDs ([#&#8203;2712](seerr-team/seerr#2712)) - ([63175f5](seerr-team/seerr@63175f5))
  - ⚠️ This change updates the webhook field `discordID` from a `string` into `discordIDs`, a list of string `string[]`.
- Add plex media ratingKey and ratingKey4k to webhook payload and… ([#&#8203;1812](seerr-team/seerr#1812)) - ([9b7b50b](seerr-team/seerr@9b7b50b))
- Add route to fetch user by jellyfin id ([#&#8203;2074](seerr-team/seerr#2074)) - ([15296a0](seerr-team/seerr@15296a0))
- Filter out "Thanks" credits when looking at a person's credits ([#&#8203;2370](seerr-team/seerr#2370)) - ([d024849](seerr-team/seerr@d024849))

##### 🐛 Bug Fixes

- *(auth)* Drop popup.closed check in Plex pin poll ([#&#8203;2941](seerr-team/seerr#2941)) - ([ce9643c](seerr-team/seerr@ce9643c))
- *(availability-sync)* Detect deleted seasons when media server retains empty season metadata ([#&#8203;2850](seerr-team/seerr#2850)) - ([9c34864](seerr-team/seerr@9c34864))
- *(discover)* Preserve keyword filter input focus after selection ([#&#8203;2962](seerr-team/seerr#2962)) - ([32169d9](seerr-team/seerr@32169d9))
- *(docs)* Enable trailingSlash to prevent 404 flash on direct navigation ([#&#8203;3039](seerr-team/seerr#3039)) - ([df105b8](seerr-team/seerr@df105b8))
- *(docs)* Switch to SWC minimizer to fix broken runtime bundle - ([d88242f](seerr-team/seerr@d88242f))
- *(docs)* Bump openapi docs packages to 5.0.2 ([#&#8203;3027](seerr-team/seerr#3027)) - ([080c68a](seerr-team/seerr@080c68a))
- *(entity)* Set the default value of UpdateDateColumn to CURRENT\_TIMESTAMP ([#&#8203;2913](seerr-team/seerr#2913)) - ([86e780e](seerr-team/seerr@86e780e))
- *(external-link)* Replace TMDB ID with IMDB ID for Trakt links ([#&#8203;2934](seerr-team/seerr#2934)) - ([f078da8](seerr-team/seerr@f078da8))
- *(imdbRadarrProxy)* Pass headers and nodeCache as options instead of params ([#&#8203;2900](seerr-team/seerr#2900)) - ([7861db4](seerr-team/seerr@7861db4))
- *(issuedescription)* Fix issue display lists in IssueDescription ([#&#8203;2972](seerr-team/seerr#2972)) - ([ce47cfb](seerr-team/seerr@ce47cfb))
- *(media)* Clean up watchlist on error card delete ([#&#8203;3073](seerr-team/seerr#3073)) - ([ee915b9](seerr-team/seerr@ee915b9))
- *(media-request)* Remove cascade from modifiedBy to prevent user column wipe ([#&#8203;2911](seerr-team/seerr#2911)) - ([2dfea0c](seerr-team/seerr@2dfea0c))
- *(ntfy)* Save priority field as number instead of string ([#&#8203;3096](seerr-team/seerr#3096)) - ([2fa535d](seerr-team/seerr@2fa535d))
- *(ntfy)* Remove undefined fields from ntfy payload ([#&#8203;2931](seerr-team/seerr#2931)) - ([377bf65](seerr-team/seerr@377bf65))
- *(override-rules)* Use find() instead of index lookup for service resolution ([#&#8203;2903](seerr-team/seerr#2903)) - ([5fdedb1](seerr-team/seerr@5fdedb1))
- *(plex-watchlist-sync)* Handle MediaContainer.Video fallback in watchlist sync   ([#&#8203;2992](seerr-team/seerr#2992)) - ([99f8520](seerr-team/seerr@99f8520))
- *(request)* Restore media status correctly when deleting requests ([#&#8203;3064](seerr-team/seerr#3064)) - ([ff88d52](seerr-team/seerr@ff88d52))
- *(scanners)* Reset orphaned processing media from deleted Radarr/Sonarr entries ([#&#8203;2757](seerr-team/seerr#2757)) - ([198e4e5](seerr-team/seerr@198e4e5))
- *(scanners)* Ignore unknown seasons in availability rollup and skip empty placeholder seasons ([#&#8203;2958](seerr-team/seerr#2958)) - ([ce51f6a](seerr-team/seerr@ce51f6a))
- *(search)* Replace "TV" with "Series" in search placeholder ([#&#8203;3067](seerr-team/seerr#3067)) - ([c04172a](seerr-team/seerr@c04172a))
- *(slider)* Add async to spring animation ([#&#8203;2978](seerr-team/seerr#2978)) - ([5267611](seerr-team/seerr@5267611))
- *(tag)* Use inset ring to avoid clipped outlines ([#&#8203;2985](seerr-team/seerr#2985)) - ([cf87205](seerr-team/seerr@cf87205))
- *(tvrequest)* Allow special episodes when partial series requests are disabled ([#&#8203;2973](seerr-team/seerr#2973)) - ([b32ab02](seerr-team/seerr@b32ab02))
- *(users)* Correct auth middleware for web push subscription ([#&#8203;3005](seerr-team/seerr#3005)) - ([bd27f2d](seerr-team/seerr@bd27f2d))
- *(watchlistsync)* Re-request deleted media from watchlist ([#&#8203;3072](seerr-team/seerr#3072)) - ([2588e49](seerr-team/seerr@2588e49))
- Update series status to partially available when seasons are missing ([#&#8203;3044](seerr-team/seerr#3044)) - ([4ed29cf](seerr-team/seerr@4ed29cf))
- Add missing "key" to React arrays ([#&#8203;3043](seerr-team/seerr#3043)) - ([4fa2c71](seerr-team/seerr@4fa2c71))
- Send availability notification if media is available before approval ([#&#8203;2819](seerr-team/seerr#2819)) - ([d426e1e](seerr-team/seerr@d426e1e))
- Normalize webhook payload encoding to support raw JSON inputs ([#&#8203;2641](seerr-team/seerr#2641)) - ([5b45806](seerr-team/seerr@5b45806))

##### 📖 Documentation

- *(blog)* Add v3.3.0 release blog post ([#&#8203;3098](seerr-team/seerr#3098)) - ([759e359](seerr-team/seerr@759e359))
- *(fail2ban)* Add fail2ban documentation ([#&#8203;2894](seerr-team/seerr#2894)) - ([39e9f1f](seerr-team/seerr@39e9f1f))
- *(nixpkgs)* Add documentation for nixpkgs 26.05 ([#&#8203;3089](seerr-team/seerr#3089)) - ([5fc7a40](seerr-team/seerr@5fc7a40))
- Add REST API documentation ([#&#8203;2981](seerr-team/seerr#2981)) - ([7aa1470](seerr-team/seerr@7aa1470))
- Add Terraform/OpenTofu provider page ([#&#8203;2967](seerr-team/seerr#2967)) - ([811126d](seerr-team/seerr@811126d))

##### 🚜 Refactor

- *(docs)* Move REST API docs to navbar and dedicated sidebar ([#&#8203;3040](seerr-team/seerr#3040)) - ([08b7bd4](seerr-team/seerr@08b7bd4))
- *(logs)* Align failed login attempt message with failed sign-i… ([#&#8203;2914](seerr-team/seerr#2914)) - ([3e4bf1b](seerr-team/seerr@3e4bf1b))
- Replace react-toast-notifications with react-hot-toast ([#&#8203;3004](seerr-team/seerr#3004)) - ([dfde4d3](seerr-team/seerr@dfde4d3))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3028](seerr-team/seerr#3028)) - ([6bb402a](seerr-team/seerr@6bb402a))
- *(actions)* Update github actions ([#&#8203;2982](seerr-team/seerr#2982)) - ([20dbc30](seerr-team/seerr@20dbc30))
- *(actions)* Update github actions (major) ([#&#8203;2947](seerr-team/seerr#2947)) - ([952261b](seerr-team/seerr@952261b))
- *(actions)* Update taiki-e/install-action action to v2.75.18 ([#&#8203;2961](seerr-team/seerr#2961)) - ([d50bdad](seerr-team/seerr@d50bdad))
- *(actions)* Update github actions ([#&#8203;2945](seerr-team/seerr#2945)) - ([60a2a87](seerr-team/seerr@60a2a87))
- *(create-tag)* Add gh token to avoid api rate limit in tag version retrieval ([#&#8203;2886](seerr-team/seerr#2886)) - ([85bfdb2](seerr-team/seerr@85bfdb2))
- *(i18n)* Update translations from Weblate - ([73fcfd2](seerr-team/seerr@73fcfd2))
- *(i18n)* Update translations from Weblate - ([788311a](seerr-team/seerr@788311a))
- *(i18n)* Update translations from Weblate - ([6eb43e0](seerr-team/seerr@6eb43e0))
- *(i18n)* Update translations from Weblate - ([656e33f](seerr-team/seerr@656e33f))
- *(i18n)* Update translations from Weblate - ([4742018](seerr-team/seerr@4742018))
- *(i18n)* Update translations from Weblate - ([2d4cd03](seerr-team/seerr@2d4cd03))
- *(i18n)* Update translations from Weblate - ([3c249c7](seerr-team/seerr@3c249c7))
- *(i18n)* Update translations from Weblate - ([4e4e673](seerr-team/seerr@4e4e673))
- *(i18n)* Update translations from Weblate ([#&#8203;2906](seerr-team/seerr#2906)) - ([6513915](seerr-team/seerr@6513915))
- *(i18n)* Update translations from Weblate ([#&#8203;2901](seerr-team/seerr#2901)) - ([56ab94a](seerr-team/seerr@56ab94a))
- *(release)* Prepare v3.2.0 - ([703faf9](seerr-team/seerr@703faf9))
- *(release)* Merge develop into main - ([0621e3d](seerr-team/seerr@0621e3d))
- *(release)* Remove git-cliff footer in release changelog ([#&#8203;2986](seerr-team/seerr#2986)) - ([550c3bc](seerr-team/seerr@550c3bc))
- Cleanup intl polyfills and dev config ([#&#8203;2965](seerr-team/seerr#2965)) - ([ba6ed6c](seerr-team/seerr@ba6ed6c))
- Ignore Renovate bot on irrelevant jobs ([#&#8203;2904](seerr-team/seerr#2904)) - ([1d2aa76](seerr-team/seerr@1d2aa76))

#### New Contributors ❤️

- [@&#8203;defaultdino](https://github.com/defaultdino) made their first contribution
- [@&#8203;haribo-hyung](https://github.com/haribo-hyung) made their first contribution
- [@&#8203;felixschndr](https://github.com/felixschndr) made their first contribution
- [@&#8203;burakemirsezen](https://github.com/burakemirsezen) made their first contribution
- [@&#8203;death2all110](https://github.com/death2all110) made their first contribution
- [@&#8203;fredrikburmester](https://github.com/fredrikburmester) made their first contribution
- [@&#8203;marcinjurczak](https://github.com/marcinjurczak) made their first contribution
- [@&#8203;Josh-Archer](https://github.com/Josh-Archer) made their first contribution
- [@&#8203;Finchow](https://github.com/Finchow) made their first contribution
- [@&#8203;kyle-engler](https://github.com/kyle-engler) made their first contribution
- [@&#8203;danjuv](https://github.com/danjuv) made their first contribution
- [@&#8203;aldoeliacim](https://github.com/aldoeliacim) made their first contribution

### [`v3.2.0`](https://github.com/seerr-team/seerr/releases/tag/v3.2.0)

[Compare Source](seerr-team/seerr@v3.1.1...v3.2.0)

#### [3.2.0](https://github.com/seerr-team/seerr/compare/v3.1.1..v3.2.0) - 2026-04-15

##### 🚀 Features

- *(blocklist)* Add support for collections ([#&#8203;1841](seerr-team/seerr#1841)) - ([993ae4c](seerr-team/seerr@993ae4c))
- *(discover)* Handle errors gracefully when content is available ([#&#8203;1542](seerr-team/seerr#1542)) - ([7920970](seerr-team/seerr@7920970))
- *(i18n)* Add Estonian language support ([#&#8203;2611](seerr-team/seerr#2611)) - ([56b79ff](seerr-team/seerr@56b79ff))
- *(i18n)* Add Luxembourgish language support ([#&#8203;2671](seerr-team/seerr#2671)) - ([dccdc95](seerr-team/seerr@dccdc95))
- *(i18n)* Add Vietnamese language support ([#&#8203;2670](seerr-team/seerr#2670)) - ([40edaea](seerr-team/seerr@40edaea))
- *(jellyfin)* Allow Jellyfin Guids with dashes for import-from-jellyfin endpoint ([#&#8203;2340](seerr-team/seerr#2340)) - ([3557745](seerr-team/seerr@3557745))
- *(notifications)* Add ntfy markdown formatting ([#&#8203;2602](seerr-team/seerr#2602)) - ([77f2c13](seerr-team/seerr@77f2c13))
- *(notifications)* Webhook custom headers ([#&#8203;2230](seerr-team/seerr#2230)) - ([3152f72](seerr-team/seerr@3152f72))
- *(notifications)* Add priority setting for ntfy agent ([#&#8203;2306](seerr-team/seerr#2306)) - ([61e0377](seerr-team/seerr@61e0377))
- *(person)* Add tmdb- and imdb link on person detail page ([#&#8203;2136](seerr-team/seerr#2136)) - ([fb2ee7c](seerr-team/seerr@fb2ee7c))
- *(quota)* Added support for unlimited quota days ([#&#8203;2797](seerr-team/seerr#2797)) - ([6d8b2b7](seerr-team/seerr@6d8b2b7))
- *(requests)* Mark requests as failed when Radarr/Sonarr unreachable ([#&#8203;2171](seerr-team/seerr#2171)) - ([c23117e](seerr-team/seerr@c23117e))
- *(settings)* Add blocklist region and language options ([#&#8203;1802](seerr-team/seerr#1802)) - ([ff469cb](seerr-team/seerr@ff469cb))
- *(settings)* Add help tooltips for services setup ([#&#8203;2662](seerr-team/seerr#2662)) - ([f5115da](seerr-team/seerr@f5115da))
- *(sonarr)* Add monitorNewItems option to sonarr settings & modal ([#&#8203;2071](seerr-team/seerr#2071)) - ([5c34c91](seerr-team/seerr@5c34c91))
- *(trending)* Add filter options ([#&#8203;2137](seerr-team/seerr#2137)) - ([4ce0db1](seerr-team/seerr@4ce0db1))
- *(ui)* Add loading state to request approve/decline buttons ([#&#8203;2815](seerr-team/seerr#2815)) - ([bd8f2d4](seerr-team/seerr@bd8f2d4))
- *(userlist)* Add sortable columns to User List ([#&#8203;1615](seerr-team/seerr#1615)) - ([eaf397a](seerr-team/seerr@eaf397a))
- *(webhook)* Add imdbid to webhook notification ([#&#8203;2658](seerr-team/seerr#2658)) - ([2432e8d](seerr-team/seerr@2432e8d))
- Sort quality profiles ASC in request and service configuration ([#&#8203;1805](seerr-team/seerr#1805)) - ([25e376c](seerr-team/seerr@25e376c))
- Add trailing whitespace warning on login username field ([#&#8203;2040](seerr-team/seerr#2040)) ([#&#8203;2177](seerr-team/seerr#2177)) - ([636dcb9](seerr-team/seerr@636dcb9))

##### 🐛 Bug Fixes

- *(auth)* Resolve Plex OAuth client ID mismatch ([#&#8203;2746](seerr-team/seerr#2746)) - ([15b3109](seerr-team/seerr@15b3109))
- *(email)* Correctly classify final MIME header in PGP email encryption ([#&#8203;2618](seerr-team/seerr#2618)) - ([9ec3d58](seerr-team/seerr@9ec3d58))
- *(email)* Preserve newlines in PGP key textarea fields ([#&#8203;2617](seerr-team/seerr#2617)) - ([835e917](seerr-team/seerr@835e917))
- *(emby)* Use static version in auth header for emby only ([#&#8203;2821](seerr-team/seerr#2821)) - ([fe2c041](seerr-team/seerr@fe2c041))
- *(entities)* Replace MySQL-only onUpdate with [@&#8203;UpdateDateColumn](https://github.com/UpdateDateColumn) ([#&#8203;2823](seerr-team/seerr#2823)) - ([0b8f872](seerr-team/seerr@0b8f872))
- *(generate-password)* Await setPassword to fix race condition ([#&#8203;2845](seerr-team/seerr#2845)) - ([061121c](seerr-team/seerr@061121c))
- *(issues)* Update issue timestamp when adding comments ([#&#8203;2616](seerr-team/seerr#2616)) - ([a16d046](seerr-team/seerr@a16d046))
- *(jellyfin-scanner)* Add TheMovieDb provider fallback for Jellyfin scanner ([#&#8203;2605](seerr-team/seerr#2605)) - ([10f23f0](seerr-team/seerr@10f23f0))
- *(login)* Resolve stuck transition when switching login forms ([#&#8203;2779](seerr-team/seerr#2779)) - ([735ec47](seerr-team/seerr@735ec47))
- *(media)* Exclude null mediaAddedAt entries ([#&#8203;2607](seerr-team/seerr#2607)) - ([001f6b1](seerr-team/seerr@001f6b1))
- *(migration)* Repair postgres blocklist id sequence ([#&#8203;2686](seerr-team/seerr#2686)) - ([f40323c](seerr-team/seerr@f40323c))
- *(movie,tv)* Respect display language for trailers ([#&#8203;2674](seerr-team/seerr#2674)) - ([90d407d](seerr-team/seerr@90d407d))
- *(open-api)* Add missing mediaType query parameter to blocklist and watchlist ([#&#8203;2722](seerr-team/seerr#2722)) - ([c7185d4](seerr-team/seerr@c7185d4))
- *(override-rules)* Remove users from `useEffect` dependency array ([#&#8203;2771](seerr-team/seerr#2771)) - ([be57997](seerr-team/seerr@be57997))
- *(overseerr-merge)* Sanitise corrupt quota values during overseerr migration ([#&#8203;2863](seerr-team/seerr#2863)) - ([43eff25](seerr-team/seerr@43eff25))
- *(plex)* Set 4K Plex URLs whenever ratingKey4k is set ([#&#8203;2635](seerr-team/seerr#2635)) - ([1548948](seerr-team/seerr@1548948))
- *(proxy)* Add path validation guardrail to imageproxy ([#&#8203;2531](seerr-team/seerr#2531)) - ([e086081](seerr-team/seerr@e086081))
- *(region-selector)* Prevent empty region reporting during sync ([#&#8203;2636](seerr-team/seerr#2636)) - ([fbfcb43](seerr-team/seerr@fbfcb43))
- *(request)* Record modifiedBy on retry and add route tests  ([#&#8203;2824](seerr-team/seerr#2824)) - ([20ccd4b](seerr-team/seerr@20ccd4b))
- *(request)* Correct delete permission check and await movie save ([#&#8203;2742](seerr-team/seerr#2742)) - ([6aeab38](seerr-team/seerr@6aeab38))
- *(requests)* Mark requests as completed when media is already available ([#&#8203;2462](seerr-team/seerr#2462)) - ([d25d0ca](seerr-team/seerr@d25d0ca))
- *(settings)* Persist new settings defaults to disk on startup ([#&#8203;2884](seerr-team/seerr#2884)) - ([66130be](seerr-team/seerr@66130be))
- *(settings)* Serialize settings writes and prevent partial overwrites ([#&#8203;2696](seerr-team/seerr#2696)) - ([6c52a2f](seerr-team/seerr@6c52a2f))
- *(settings)* Remove beta info banner ([#&#8203;2615](seerr-team/seerr#2615)) - ([fece753](seerr-team/seerr@fece753))
- *(setup)* Fix Plex login not proceeding after authentication ([#&#8203;2596](seerr-team/seerr#2596)) - ([1dc5154](seerr-team/seerr@1dc5154))
- *(watchlist-sync)* Handle empty watchlists on PostgreSQL ([#&#8203;2718](seerr-team/seerr#2718)) - ([865396f](seerr-team/seerr@865396f))
- Improve local login UX ([#&#8203;2849](seerr-team/seerr#2849)) - ([aef2481](seerr-team/seerr@aef2481))
- Await missing repository saves ([#&#8203;2760](seerr-team/seerr#2760)) - ([1bb638e](seerr-team/seerr@1bb638e))
- Helm chart liveness and readiness probe ([#&#8203;2755](seerr-team/seerr#2755)) - ([4434c45](seerr-team/seerr@4434c45))
- Disambiguate tmdb ids by media type across lookups ([#&#8203;2577](seerr-team/seerr#2577)) - ([0be1896](seerr-team/seerr@0be1896))
- Anchor streaming service filter check icon to each provider card ([#&#8203;2634](seerr-team/seerr#2634)) - ([94ccd47](seerr-team/seerr@94ccd47))

##### 📖 Documentation

- *(contributing-guide)* Fix a typo ([#&#8203;2807](seerr-team/seerr#2807)) - ([6f9b743](seerr-team/seerr@6f9b743))
- *(docker)* Replace backslashes by backticks in windows docker run commands \[skip-ci] ([#&#8203;2557](seerr-team/seerr#2557)) - ([40e02bb](seerr-team/seerr@40e02bb))
- Clarify Docker volume creation instructions on fresh Windows install ([#&#8203;2861](seerr-team/seerr#2861)) - ([a133930](seerr-team/seerr@a133930))
- Move network-related docs to a dedicated tab ([#&#8203;2791](seerr-team/seerr#2791)) - ([5bbdc52](seerr-team/seerr@5bbdc52))
- Promote Nixpkgs as an official installation method ([#&#8203;2775](seerr-team/seerr#2775)) - ([05ad60c](seerr-team/seerr@05ad60c))
- Fix PM2 start command syntax ([#&#8203;2713](seerr-team/seerr#2713)) - ([5373da4](seerr-team/seerr@5373da4))

##### 🚜 Refactor

- *(imageproxy)* Reduce noisy image cache logging ([#&#8203;2789](seerr-team/seerr#2789)) - ([036d000](seerr-team/seerr@036d000))
- *(notifications)* Move event from author to title field in Discord Embed ([#&#8203;2119](seerr-team/seerr#2119)) - ([a2d1e1b](seerr-team/seerr@a2d1e1b))
- *(userlist)* Responsive columns and buttons ([#&#8203;2083](seerr-team/seerr#2083)) - ([dbe1fca](seerr-team/seerr@dbe1fca))
- *(watchlistsync)* Log media request creation after success instead of before ([#&#8203;2790](seerr-team/seerr#2790)) - ([685cb44](seerr-team/seerr@685cb44))
- Rename Error components to ErrorPage ([#&#8203;2668](seerr-team/seerr#2668)) - ([d5c5f1f](seerr-team/seerr@d5c5f1f))

##### 🧪 Testing

- *(user-list)* Deflake sorting assertions ([#&#8203;2766](seerr-team/seerr#2766)) - ([20c2ed8](seerr-team/seerr@20c2ed8))
- Support server-side unit testing ([#&#8203;2485](seerr-team/seerr#2485)) - ([8563362](seerr-team/seerr@8563362))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;2683](seerr-team/seerr#2683)) - ([a2154f9](seerr-team/seerr@a2154f9))
- *(actions)* Update github actions ([#&#8203;2672](seerr-team/seerr#2672)) - ([f047cab](seerr-team/seerr@f047cab))
- *(actions)* Update github actions ([#&#8203;2632](seerr-team/seerr#2632)) - ([e25c1a5](seerr-team/seerr@e25c1a5))
- *(create-tag)* Correct quote style in commit message for tag preparation ([#&#8203;2593](seerr-team/seerr#2593)) - ([687f18b](seerr-team/seerr@687f18b))
- *(docker)* Release alias for major and minor version series ([#&#8203;2881](seerr-team/seerr#2881)) - ([1cc73a8](seerr-team/seerr@1cc73a8))
- *(i18n)* Update translations from Weblate - ([e85216a](seerr-team/seerr@e85216a))
- *(i18n)* Update translations from Weblate - ([b1adc79](seerr-team/seerr@b1adc79))
- *(i18n)* Update translations from Weblate ([#&#8203;2419](seerr-team/seerr#2419)) - ([4bd7c19](seerr-team/seerr@4bd7c19))
- *(pr-validation)* Make checklist box detection case-insensitive ([#&#8203;2802](seerr-team/seerr#2802)) - ([58514ec](seerr-team/seerr@58514ec))
- *(pr-validation)* Update pull request permissions to write for validation jobs ([#&#8203;2800](seerr-team/seerr#2800)) - ([986761f](seerr-team/seerr@986761f))
- *(pr-validation)* Disable package manager cache in nodejs setup ([#&#8203;2799](seerr-team/seerr#2799)) - ([67e27d5](seerr-team/seerr@67e27d5))
- *(release)* Prepare v3.2.0 - ([e0b2a1c](seerr-team/seerr@e0b2a1c))
- *(release)* Merge develop into main - ([c5800a0](seerr-team/seerr@c5800a0))
- Bump minimum required node version to 22.19.0 ([#&#8203;2873](seerr-team/seerr#2873)) - ([891265f](seerr-team/seerr@891265f))
- Add PR validation workflow and update contributing guidelines ([#&#8203;2777](seerr-team/seerr#2777)) - ([772e83d](seerr-team/seerr@772e83d))
- Upgrade to eslint v9 ([#&#8203;2574](seerr-team/seerr#2574)) - ([36243a0](seerr-team/seerr@36243a0))
- Ignore helm scope in git-cliff ([#&#8203;2638](seerr-team/seerr#2638)) - ([4d2b658](seerr-team/seerr@4d2b658))

#### New Contributors ❤️

- [@&#8203;aslafy-z](https://github.com/aslafy-z) made their first contribution
- [@&#8203;leereilly](https://github.com/leereilly) made their first contribution
- [@&#8203;jisef](https://github.com/jisef) made their first contribution
- [@&#8203;dougrathbone](https://github.com/dougrathbone) made their first contribution
- [@&#8203;bobziroll](https://github.com/bobziroll) made their first contribution
- [@&#8203;v3DJG6GL](https://github.com/v3DJG6GL) made their first contribution
- [@&#8203;Roboroads](https://github.com/Roboroads) made their first contribution
- [@&#8203;costajohnt](https://github.com/costajohnt) made their first contribution
- [@&#8203;tiagodefendi](https://github.com/tiagodefendi) made their first contribution
- [@&#8203;Jyasapara](https://github.com/Jyasapara) made their first contribution
- [@&#8203;Sym-jay](https://github.com/Sym-jay) made their first contribution
- [@&#8203;bibi0019](https://github.com/bibi0019) made their first contribution
- [@&#8203;redondos](https://github.com/redondos) made their first contribution
- [@&#8203;bogo22](https://github.com/bogo22) made their first contribution
- [@&#8203;jabloink](https://github.com/jabloink) made their first contribution
- [@&#8203;YakGravity](https://github.com/YakGravity) made their first contribution
- [@&#8203;dj0024javia](https://github.com/dj0024javia) made their first contribution
- [@&#8203;Jerra94](https://github.com/Jerra94) made their first contribution
- [@&#8203;its-wizza](https://github.com/its-wizza) made their first contribution
- [@&#8203;ventiph](https://github.com/ventiph) made their first contribution
- [@&#8203;RinZ27](https://github.com/RinZ27) made their first contribution<!-- generated by git-cliff -->

### [`v3.1.1`](https://github.com/seerr-team/seerr/releases/tag/v3.1.1)

[Compare Source](seerr-team/seerr@v3.1.0...v3.1.1)

This update addresses a critical security vulnerability discovered in one of our core dependencies (axios).
**This is not the same vulnerability where axios was hijacked.**

##### 🛡️ Security

- Patch [CVE-2026-40175](GHSA-fvcv-3m26-pcqx) - Unrestricted Cloud Metadata Exfiltration via Header Injection Chain - ([3ca6422](seerr-team/seerr@3ca6422))

##### 🐛 Bug Fixes

- *(imageproxy)* Type axios instance - ([74100e9](seerr-team/seerr@74100e9))

### [`v3.1.0`](https://github.com/seerr-team/seerr/releases/tag/v3.1.0)

[Compare Source](seerr-team/seerr@v3.0.1...v3.1.0)

##### 🛡️ Security

- Patch [CVE-2026-27707](GHSA-rc4w-7m3r-c2f7)  - Unauthenticated account registration on Plex-configured Seerr instances via Jellyfin authentication endpoint  - ([4ae2068](seerr-team/seerr@4ae2068))
- Patch [CVE-2026-27793](GHSA-f7xw-jcqr-57hp) - Broken Object-Level Authorization in User Profile Endpoint Exposes Third-Party Notification Credentials - ([4f089b2](seerr-team/seerr@4f089b2))
- Patch [CVE-2026-27792](GHSA-gx3h-3jg5-q65f)  - Missing authentication on pushSubscription endpoints  - ([946bdecec](seerr-team/seerr@946bdec))

##### 🚀 Features

- *(helm)* Use an existing PVC as config volume ([#&#8203;2447](seerr-team/seerr#2447)) - ([8f0c904](seerr-team/seerr@8f0c904))
- *(servarr-api)* Make Servarr API request timeout configurable ([#&#8203;2556](seerr-team/seerr#2556)) - ([3bcb4da](seerr-team/seerr@3bcb4da))
- Self-host font for better privacy ([#&#8203;2540](seerr-team/seerr#2540)) - ([10ea21b](seerr-team/seerr@10ea21b))

##### 🐛 Bug Fixes

- *(helm)* Add "v" as prefix for appVersion tag ([#&#8203;2445](seerr-team/seerr#2445)) - ([04b9d87](seerr-team/seerr@04b9d87))
- *(jellyfin-scanner)* Include unmatched seasons in processable seasons ([#&#8203;2538](seerr-team/seerr#2538)) - ([68f56d2](seerr-team/seerr@68f56d2))
- *(link-account)* Fix error-message override ([#&#8203;2547](seerr-team/seerr#2547)) - ([b843be0](seerr-team/seerr@b843be0))
- *(plex-scanner)* Add TVDb to TMDB fallback in plex scanner ([#&#8203;2537](seerr-team/seerr#2537)) - ([7c60a5c](seerr-team/seerr@7c60a5c))
- *(radarr)* Trigger search for existing monitored movies without files ([#&#8203;2391](seerr-team/seerr#2391)) - ([55776ea](seerr-team/seerr@55776ea))
- *(servarr)* Increase default API timeout from 5000ms to 10000ms ([#&#8203;2442](seerr-team/seerr#2442)) - ([b499976](seerr-team/seerr@b499976))
- *(sonarr)* Use configured metadata provider for season filtering ([#&#8203;2516](seerr-team/seerr#2516)) - ([5013d1d](seerr-team/seerr@5013d1d))
- *(watch-data)* Use sentinel values to avoid invalid SQL syntax ([#&#8203;2552](seerr-team/seerr#2552)) - ([947f70c](seerr-team/seerr@947f70c))
- *(watchlist-sync)* Correct permission typo for TV auto requests ([#&#8203;2488](seerr-team/seerr#2488)) - ([e0e4b6f](seerr-team/seerr@e0e4b6f))
- Preserve blocklist on media deletion & optimise watchlist-sync ([#&#8203;2478](seerr-team/seerr#2478)) - ([9da8bb6](seerr-team/seerr@9da8bb6))

##### 🚜 Refactor

- *(tailwind)* Replace deprecated tailwind utilities ([#&#8203;2542](seerr-team/seerr#2542)) - ([f42a4ec](seerr-team/seerr@f42a4ec))

##### 📖 Documentation

- *(synology)* Add installation guide via SynoCommunity ([#&#8203;2503](seerr-team/seerr#2503)) - ([0e636a3](seerr-team/seerr@0e636a3))
- *(truenas)* Update install/migration guide ([#&#8203;2491](seerr-team/seerr#2491)) - ([dc1734d](seerr-team/seerr@dc1734d))
- *(unraid)* Improve unraid migration guide  ([#&#8203;2470](seerr-team/seerr#2470)) - ([5e64d49](seerr-team/seerr@5e64d49))
- Update Unraid install and migration guides with dual permission methods ([#&#8203;2532](seerr-team/seerr#2532)) - ([a0d0eb1](seerr-team/seerr@a0d0eb1))
- Add a warning in migration-guide for third party installation ([#&#8203;2527](seerr-team/seerr#2527)) - ([7e9dff3](seerr-team/seerr@7e9dff3))
- Remove double quotes (") from DB\_HOST environment variable ([#&#8203;2514](seerr-team/seerr#2514)) - ([fa905be](seerr-team/seerr@fa905be))
- Add Unraid installation and migration guide ([#&#8203;2440](seerr-team/seerr#2440)) - ([b6a9132](seerr-team/seerr@b6a9132))
- Fix migration guide title ([#&#8203;2425](seerr-team/seerr#2425)) - ([39ae32f](seerr-team/seerr@39ae32f))

##### ⚡ Performance

- Add missing indexes on all foreign key columns ([#&#8203;2461](seerr-team/seerr#2461)) - ([c6bcfe0](seerr-team/seerr@c6bcfe0))

##### ⚙️ Miscellaneous Tasks

- *(changelog)* Fix changelog template ([#&#8203;2431](seerr-team/seerr#2431)) - ([c2977f6](seerr-team/seerr@c2977f6))
- *(eslint)* Add react/self-closing-comp ([#&#8203;2563](seerr-team/seerr#2563)) - ([cd8b386](seerr-team/seerr@cd8b386))
- *(github)* Add docs and maintenance issue templates ([#&#8203;2467](seerr-team/seerr#2467)) - ([cf4883a](seerr-team/seerr@cf4883a))
- *(helm)* Add GatewayAPI route support to helm chart ([#&#8203;2544](seerr-team/seerr#2544)) - ([3a42f59](seerr-team/seerr@3a42f59))
- *(helm)* Update ghcr.io/seerr-team/seerr ( 3.0.0 → 3.0.1 ) \[skip-ci] ([#&#8203;2441](seerr-team/seerr#2441)) - ([87fb0df](seerr-team/seerr@87fb0df))
- *(husky)* Fixed husky commit message from bash/zsh syntax to sh syntax ([#&#8203;2572](seerr-team/seerr#2572)) - ([a00c9e5](seerr-team/seerr@a00c9e5))
- *(release)* Prepare ${TAG\_VERSION} - ([94a70bb](seerr-team/seerr@94a70bb))
- Updated the Contributing and Security guides to reflect our current practices ([#&#8203;2579](seerr-team/seerr#2579)) - ([0d40a42](seerr-team/seerr@0d40a42))
- Disable nextjs telemetry ([#&#8203;2517](seerr-team/seerr#2517)) - ([cecdd63](seerr-team/seerr@cecdd63))
- Update contributing guide regarding Automated AI Agent ([#&#8203;2518](seerr-team/seerr#2518)) - ([880fbc9](seerr-team/seerr@880fbc9))
- Remove discord notification from release ([#&#8203;2501](seerr-team/seerr#2501)) - ([fba20c1](seerr-team/seerr@fba20c1))
- Add create-tag workflow to streamline release process ([#&#8203;2493](seerr-team/seerr#2493)) - ([06e5eb0](seerr-team/seerr@06e5eb0))
- Update concurrency logic ([#&#8203;2481](seerr-team/seerr#2481)) - ([4939f13](seerr-team/seerr@4939f13))
- Add semantic-pr workflow to enforce conventional commits ([#&#8203;2472](seerr-team/seerr#2472)) - ([5e57fdc](seerr-team/seerr@5e57fdc))

#### New Contributors ❤️

- [@&#8203;caillou](https://github.com/caillou) made their first contribution
- [@&#8203;Kenshin9977](https://github.com/Kenshin9977) made their first contribution
- [@&#8203;MagicLegend](https://github.com/MagicLegend) made their first contribution
- [@&#8203;wiiaam](https://github.com/wiiaam) made their first contribution
- [@&#8203;mjonkus](https://github.com/mjonkus) made their first contribution
- [@&#8203;nova-api](https://github.com/nova-api) made their first contribution
- [@&#8203;mreid-tt](https://github.com/mreid-tt) made their first contribution
- [@&#8203;DataBitz](https://github.com/DataBitz) made their first contribution
- [@&#8203;Hyperion2220](https://github.com/Hyperion2220) made their first contribution
- [@&#8203;blassley](https://github.com/blassley) made their first contribution
- [@&#8203;JanKleine](https://github.com/JanKleine) made their first contribution
- [@&#8203;koiralasandesh](https://github.com/koiralasandesh) made their first contribution<!-- generated by git-cliff -->

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIyMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: Renovate Bot <renovate@bhamm-lab.com>
Reviewed-on: https://codeberg.org/blake-hamm/bhamm-lab/pulls/239
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview PRs deployed for testing with tag `:preview-prxx`

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cannot delete series from watch list that has been delisted from TVDB/TMDB, Clear Data button does nothing

5 participants